Reservoir simulation using a JewelGrid

From a lateral perspective, a JewelGrid is composed of a 100% rectangular pattern. This results in a regular lateral IJ-grid, with vertical 'stacks'.  Each stack (more accurately stack set, see below) is fully determined by its i- and j-value. On the other hand, layers are fully determined by their k-value. The vertical grid boundaries of the grid cells are determined by k-layer definition, faults, intrusions, and unconformities (the latter three called 'discontinuity surfaces' or 'discontinuities'). This allows for a highly accurate representation of these geological phenomena, even within the dimensions of an IJ-stack.

The cross-section in the figure below shows the effect of layering and a reverse fault.

Note that in the following description both 'layer' and 'k-layer' are used, meaning the same feature, namely a layer consisting of a single cell in the vertical direction

Effect of layering and a reverse fault    click to enlarge

Although each k-layer has a unique k-value, the fault results in that a layer may have two, or even more, grid cells with an IJ-stack. For example, the yellow layer, with say k-value 2 (top undefined layer has k=0), has two grid cells namely cell 15 and 10, in the third IJ-stack from the left. Let’s assume this IJ-stack has i=3, and j=5. Hence, both cells 15 and 10 have i=3, j=5, and k=2.  These grid cells are called multiple-IJK cells. Most reservoir simulators cannot handle this, and, in order to correctly model a JewelGrid in a reservoir simulator, a grid is built that the simulators can handle. This grid is called the simulation grid.

Note that apart from grid cells adjacent to faults, intrusions, or unconformities, the JewelGrid results in almost rectangular grid cells, with only the dipping of the layers resulting in not 100% perfect orthogonally.  This unique feature of JewelGrid cells results in a very accurate finite difference definition in the simulator resulting in most correct modeling of flow (convection), diffusion, and heat conduction.

Before going into detail, a few concepts should be explained.

  • A stack is all the cells with the same i- and j-value above (top stack), below (bottom stack), or in between discontinuities. This means that all cells within a stack always have a unique k-value.
  • A stack set is composed of all stacks with the same i- and j-value. A stack set is defined by its i- and j-value.
  • A multi-valued stack set is a stack set that has two or more stacks.
  • Multiple-IJK cells are cells that have the same i-, j-, and k-value.
  • A schematic grid is a schematic representation of a simulation grid.

Creating a simulation grid from a JewelGrid

To correctly model a JewelGrid in a reservoir simulator, a grid is built that simulators can handle. In the following we will call that grid the simulation grid.

In the simulation grid, multiple-IJK cells are taken care of by adding additional k-layers (as compared to number layers in the JewelGrid layers) to the simulation grid and storing multiple-IJK cells in these layers. Non-neighbor connections (also called special connections) are created to connect these multiple-IJK cells to their actual neighbors in the JewelGrid. Subsequently, transmissibilities for both neighbor and non-neighbor connections are calculated.

Although porosity, net-to-gross and permeabilities to the simulator are automatically specified, and the simulator subsequently calculates the pore volume and transmissibilities, these simulator calculated values are overwritten with its own calculated values.

The creation of a simulation grid from a JewelGrid will be explained by using a simple example of a grid with three layers and a reverse fault.  The figure above shows a 2D-slice of this example grid. Two IJ-stack sets have been used to accurately represent the fault. Along this fault, non-neighbor connections have been defined.

Important   The cells indices determine if cells are neighbors.  For cells to be neighbors, the index values for two directions (for instance I and J) have to be equal, and in the other direction (for instance K) the difference should be exactly one. Non-neighbor connections are needed for cells that are neighbors in the JewelGrid but not in the simulation grid. The non-neighbor connection consists of the IJK indices of the two cells and the transmissibility value. For neighbors in the simulation grid that are not neighbors in the JewelGrid, the transmissibility between them is set to zero.

To explain the creation of the simulation grid, take a look at the following example description. In this example case the creation of the simulation grid entails adding extra grid k-layers for the simulation. These layers are used to store blocks of cells which are situated directly above faults, unconformities, or intrusions. For example, the cells above the reverse fault in the figure (marked by a green boundary) are moved to additional layers.

The resulting simulation grid is illustrated in the next figure. Notice that the number of layers has doubled and that the cells above the reverse fault have been moved to the new layers. The empty space created above the fault and in the new layers is filled with void cells. These void cells will be ignored by the simulator. Additional non-neighbor connections have also been defined between the moved cell block and its previous direct neighbors. You may notice that this way is not the most efficient way of storing the multiple-IJK cells, but this is the simplest way to explain the basics of the method.

Resulting simulation grid with additional layers to store multiple-IJK cells    click to enlarge

All defined non-neighbor connections will be specified in the input file(s) to the simulator (see below).

Non-neighbor connections are specified in the input file    click to enlarge

Apart from just blindly reallocating multiple-IJK cells, functionality is also provided to reduce the number of multiple-IJK cells by merging them with neighbor cells.  For example, cell 25 could be merged into cell 15 and cell 10 into 20, thereby reducing the number of additional cells in the grid by two. During these operations the total pore volume is maintained and the connections are property reallocated. For example, if cell 10 is merged into cell 20, the transmissibility of connection between cells 15 and 10 is added to the transmissibility of connection between cells 15 and 20.

In most situations all multiple-IJK cells are able to be merged and so no additional layers are created in the simulation grid.

When do we really need to do simulation grid preparation? Simulation grid preparation is only necessary in case of multiple-IJK cells, i.e., in case two or more cells have the same i-, j- and k-value.

Creating a simulation grid

How the resulting simulation grid looks like depends on the simulation grid creation settings (Reservoir Description form, step Simulation grid creation settings) and the values of the key properties, i.e., porosity, permeability and net-to-gross. 

By default, the created simulation grid remains invisible. If you click Create schematic grid in the 'Diagnostics' step of the Reservoir Description form, a schematic grid similar to that shown in the figure above is created and can be analyzed in a 3D view, for example.

Note that the schematic grid is, as the name suggests, just a schematic representation of the simulation grid. For example, in the schematic grid all cells have uniform thickness and the added layers are vertically positioned below the actual layers. In the simulation grid, the cells in the added layers will have the same cell center depth as the corresponding cell in the JewelGrid. For example, in the figures above, while cells 6 and 14 have different depths in the schematic grid, in the simulation grid the have similar depth.

Each time you build a new input dataset a check occurs which indicates whether the simulation grid has to be recalculated. This is required when simulation grid creation settings have changed and/or when one or more of the key properties has changed.  Also, each time you (implicitly) ask for a new simulation grid creation, a check is performed to see whether a simulation grid created with the same parameters and properties already exists. If the latter is the case, the existing simulation grid is used. This may, for example, be the case if you have done you history matching and are evaluating alternative development scenarios.

When a simulation grid is created, a property folder is created in the JewelExplorer under the grid linked to the simulation case. The name of the folder is the name of the case for which the simulation grid was created plus 'SimGrid'. This folder contains the grid properties of the simulation grid.  Examples of properties created are, the simulation grid i-, j-, and k-values (named SimI, SimJ, and SimK), and in case cells are merged, a property named 'Merged Cells' which indicates which cells have been merged, or not.

Simulation grid creation options

Four options to create a simulation grid from a JewelGrid are provided, namely:

  • Include impenetrable layers
  • Merge multiple-IJK cells
  • Merge small cells
  • Merge pinch-out cells

The settings shown above are the default settings. 

The effect simulation grid creation options have on the creation of the simulation grid will be discussed in detail below.